package leetcode_200;


/**
 *@author 周杨
 *LargestNumber_179 给定一个int 数组  调整其顺序 要求最后输出最大的连接数字
 *describe:自己定义排序算法 将int排序即可
 *2018年6月10日 下午4:41:20
 */
public class LargestNumber_179 {

	public static void main(String[] args) {
		LargestNumber_179 test=new LargestNumber_179();
		//System.out.println(test.largestNumber(new int[] {10,2}));
		System.out.println(test.largestNumber(new int[] {3,30,34,5,9}));
		System.out.println(test.compare(30, 3));
		System.out.println(test.compare(31, 3));
		System.out.println(test.compare(334, 3));

	}
	/**
	 * describe:用哈希  题目没有看清楚 以为是按照位数排序
	 * 2018年6月10日 下午3:52:36
	 */
	public String largestNumber1(int[] nums) {
		int hash[]=new int[10];
		for (int i:nums) {
			while(i>0) {
				int now=i%10;
				hash[now]++;
				i/=10;
			}
		}
		StringBuilder res=new StringBuilder();
		for(int i=9;i>=0;--i) {
			for(int j=0;j<hash[i];++j) {
				res.append(i);
			}
		}
		return res.toString();
    }
	//System.out.println(test.largestNumber(new int[] {3,30,34,5,9}));
	public String largestNumber(int[] nums) {
      bubbleSort(nums);
      if(nums[0]==0)
    	  return "0";
      StringBuilder sb=new StringBuilder();
      for(int i:nums)
    	  sb.append(i);
      return sb.toString();
    }
	public  void bubbleSort(int nums[]) {
		if(nums.length<=1)
			return ;
		boolean flag=true;
		int temp;
		for(int i=nums.length-1;i>0;--i) {
			flag=true;
			for(int j=0;j<i;++j) {
				if(compare(nums[j+1], nums[j])){//如果后面的数小于前面
					temp=nums[j];
					nums[j]=nums[j+1];
					nums[j+1]=temp;
					flag=false;
				}
			}
			if(flag)
				return ;
		}
	}
	
	
	public boolean compare(int i1,int i2) {
		String s1=String.valueOf(i1);
		String s2=String.valueOf(i2);
		StringBuilder sb1=new StringBuilder(s1);
		sb1.append(s2);
		StringBuilder sb2=new StringBuilder(s2);
		sb2.append(s1);
		for(int i=0;i<sb1.length();++i) {
			if(sb1.charAt(i)>sb2.charAt(i))
				return true;
			else if(sb1.charAt(i)<sb2.charAt(i))
				return false;
		}
		return true;
	}
}
